<?php
/**
 * 公共控制器，提供基础方法
 * @author IIIThSoul
 * 
 */
namespace Common\Controller;

use Think\Controller;

class CommonController extends Controller
{
    /**
     * 通用添加，使用简单数据页面的添加 
     * @param string $modelname         模型名称
     * @param string $template          模板名称
     * @param string $success_msg       成功提示信息，为空将不提示自动跳转
     * @param string $error_msg         错误信息，为空调用模型错误信息
     * @param string $success_redirect  成功跳转，适用于U()的路由信息
     */
    protected function simpleAdd($modelname, $template = 'Form', $success_msg = '', $error_msg = '',  $success_redirect = 'Index')
    {
        if (!IS_POST) {
            
            $this->display($template);
        
        } else {
            
            $Model = D($modelname);
            $state = $Model->update();
            
            // 插入失败
            false == $state && $this->error(empty($error_msg) ? $Model->getError() : $error_msg);   
            
            // 插入成功
            $this->success($success_redirect);
        }
    }
    
    /**
     * 通用修改
     * @param string $modelname         模型名称
     * @param number $id                主键ID
     * @param mixed $fields             要获取的字段，true为全部          
     * @param string $template          显示模板名称
     * @param string $success_msg       成功提示信息，为空直接跳转
     * @param string $error_msg         失败提示信息，为空调用模型错误信息
     * @param string $success_redirect  成功跳转，适用于U()的路由信息
     */
    protected function simpleEdit($modelname, $id, $fields = true, $template = 'Form', $success_msg = '', $error_msg ='', $success_redirect = 'Index')
    {
        $Model = D($modelname);
        if (!IS_POST) {
            
            // 根据主键获取一条数据
            $data = $Model->field($fields)->find($id);
            
            // 默认模板变量为$data
            $this->assign('data', $data);
            $this->display($template);
        } else {
            
            $state = $Model->update();
            
            // 更新失败
            false === $state && $this->error(empty($error_msg) ? $Model->getError() : $error_msg);
            
            // 更新成功，成功提示为空，直接跳转，否则提示后跳转
            empty($success_msg) ? $this->redirect($success_redirect) : $this->success($success_redirect);
        }
    }
    
    /**
     * 通用删除
     * @param string $modelname         模型名称
     * @param number $id                主键ID
     * @param string $success_msg       成功提示信息，为空直接跳转
     * @param string $error_msg         失败提示信息，为空调用模型错误信息
     * @param string $success_redirect  成功跳转，适用于U()的路由信息
     * @param boolean$is_really_delete  是否真实删除
     */
    protected function simpleDel($modelname, $id, $success_msg = '', $error_msg = '', $success_redirect = 'Index', $is_really_delete = false)
    {
        $Model = D($modelname);
        $pk    = $Model->getPk();
        $state = false;
        
        // 判断是否为真实删除
        if ($is_really_delete) {
            $state = $Model->where("{$pk}=%d", $id)->setField('is_delete', 1);
        } else {
            $state = $Model->where("{$pk}=%d", $id)->delete();
        }
        
        
        // 删除失败
        false === $state && $this->error(empty($error_msg) ? $Model->getError() : $error_msg);
        
        // 删除成功，成功提示为空，直接跳转，否则提示后跳转
        empty($success_msg) ? $this->redirect($success_redirect) : $this->success($success_redirect);
        
    }
}